package com.project.controller.web;

import com.alibaba.fastjson.JSONObject;
import com.project.common.utils.MyPageHelper;
import com.project.entity.University;
import com.project.myBeans.R;
import com.project.myBeans.ResponseBean;
import com.project.service.AreaService;
import com.project.service.UniversityService;
import com.project.service.base.BaseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: TateBrown
 * @date: 2018/5/27 17:41
 * @param:
 * @return:
 */
@EnableAutoConfiguration //自动载入应用程序所需的所有Bean
@RestController //@Controller与@ResponseBody的合并
@RequestMapping(value = "/university")
@Api(description = "大学相关",value = "university")
public class UniversityController extends BaseService {
    @Autowired
    UniversityService universityService;

    @Autowired
    private AreaService areaService;

    /**
     * TateBrown 2018年5月27日
     *
     * @param
     * @return
     */
    @ApiOperation("查找所有学院")
    @GetMapping("/findAll")
    public R findAll() {
        try {
            List<University> universities;
            universities = universityService.findAll();
           return R.ok().put("data",universities);
        } catch (Exception e) {
            e.printStackTrace();
            return R.error();
        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param university
     * @return
     */
    @ApiOperation("添加一个大学")
    @PostMapping("/addOne")
    public R addOne(@RequestBody University university) {
        try {
           if (universityService.findByUniversityName(university.getName()).isEmpty()){
               if(processSuccessDeleteUpdate(universityService.add(university))) {
                   return R.ok().put("data", university.getId());
               }else{
                   return R.error();
               }
           }else{
               return R.error("该大学已存在");
           }

        } catch (Exception e) {
            e.printStackTrace();
            return R.error("程序异常");
        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param university
     * @return
     */
    @ApiOperation("获取大学及大学下的学院和对应的学院管理员信息（根据学院管理员数量分页）")
    @PostMapping("/findUniversityAndSchoolsByCondition")
    public R findUniversityAndSchoolsByCondition(@RequestBody University university) {
        List<JSONObject> jsonObjectList = new ArrayList<>();
        try {
            if (university.getPageIndex() > 0) {
                university.setPageIndex(university.getPageIndex() - 1);
            }
            List<University> universityList = universityService.findUniversityAndSchoolsByCondition(university);
            for (University university1: universityList){
                JSONObject jsonObject = new JSONObject();
                //大学表信息
                jsonObject.put("Institutions", university1);
                //区域信息 省/市/区
                if (university1.getLocationid() != null)
                    jsonObject.put("area", areaService.findOneDetailById(university1.getLocationid()));
                jsonObjectList.add(jsonObject);
            }
            return R.ok("查找成功").put("data",jsonObjectList).put("total", MyPageHelper.getTotal(jsonObjectList));
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("程序异常");

        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param university
     * @return
     */
    @ApiOperation("查找所有学校信息及其下属学院信息 + 条件查找（根据大学数量分页）")
    @PostMapping("/findUniversityAndSchoolsByCondition2")
    public R findUniversityAndSchoolsByCondition2(@RequestBody University university){
        try {

            MyPageHelper.setPageParam(university);
            if (university.getPageIndex() > 0) {
                university.setPageIndex(university.getPageIndex() - 1);
            }
            return R.ok("获取成功").put("data",universityService.findUniversityAndSchoolsByCondition2(university)).put("total",MyPageHelper.getTotal(universityService.findUniversityAndSchoolsByCondition2(university)));

        } catch (Exception e) {
            e.printStackTrace();
           return R.error("程序异常");
        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param university
     * @return
     */
    @ApiOperation("模糊分页搜索仅查学校信息（包含学校地理位置）")
    @PostMapping("/findByCondition")
    public R findByCondition(@RequestBody University university) {
        List<JSONObject> jsonObjectList = new ArrayList<>();
        try {
            if (university.getPageIndex() > 0) university.setPageIndex(university.getPageIndex() - 1);
            List<University> universityList = universityService.findByCondition(university);
            for (University university1: universityList){
                JSONObject jsonObject = new JSONObject();
                //大学表信息
                jsonObject.put("jsonObject", university1);
                //区域信息 省/市/区
                if (university1.getLocationid() != null)
                    jsonObject.put("area", areaService.findOneDetailById(university1.getLocationid()));
                jsonObjectList.add(jsonObject);
            }
            return R.ok("获取成功").put("data",jsonObjectList).put("total",MyPageHelper.getTotal(jsonObjectList));
        } catch (Exception e) {
            e.printStackTrace();
         return R.error("程序异常");
        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param university
     * @return
     */
    @ApiOperation("修改单条大学表记录")
    @PostMapping("/modifyOneById")
    public R modifyOneById(@RequestBody University university){

        try {
            if (checkDeleteUpdateIsSuccess(universityService.modify(university))){
                return R.ok("修改成功");
            }
            else{
              return R.error("修改失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
         return R.error("程序异常");
        }
    }

    /**
     * TateBrown 2018年5月27日
     *
     * @param id
     * @return
     */
    @ApiOperation("根据大学id获取单条信息")
    @GetMapping("/findOneById/{id}")
    public R findOneById(@PathVariable("id") Integer id){

        try {
            return R.ok("获取成功").put("data",universityService.findOne(id));
        } catch (Exception e) {
            e.printStackTrace();
           return R.error("程序异常");
        }
    }
    /**
     * TateBrown 2018年5月27日
     *
     * @param universityId
     * @return
     */
    @ApiOperation("根据大学id获取单条信息")
    @GetMapping("/removeOneChainById/{universityId}")
    public R removeOneChainById(@PathVariable("universityId") Integer universityId, HttpServletRequest request){

        try {
            universityService.removeOneChain(universityId, request);
            return R.ok("删除成功");
        } catch (Exception e) {
            e.printStackTrace();
            return R.error("程序异常");
        }

    }
}
